iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
1

上次介紹了MONGODB的使用,今天來介紹如何把感測器讀到的資料上傳至資料庫
我們在DAY12有教說把資料包成JSON格式,所以我們arduino傳回來的資料就已經是包好的了
但直接的JSON格式他不吃,所以我們要把KEY跟VALUE抽出來

  Arduno_data = JSON.parse(line);
  Sensor_data = Object.values(Arduno_data)
  Sensor_key = Object.keys(Arduno_data)

這樣會幫你把KEY跟VALUE轉成陣列 ,之後再做插入資料的時候就只要使用陣列的長度做迴圈

    for(var i=0 ; i<Sensor_key.length;i++){
    db_client.collection('data',function(err,collection){
        collection.insertOne({ name:Sensor_key[i], data:Sensor_data[i] });
     
    if(i == Sensor_key.length-1 ){
      collection.countDocuments(function(err,count){
        if(err) throw err;
        console.log('Total Rows:'+count);
    });
  }
  });
  }

這樣子就能夠把包好的資料一筆一筆的插入資料庫

要注意陣列資料如果有兩筆,length會是2 但是在讀取資料的時候要用 [0]第零個位子 [1] 第一個位子的方式讀取

雖然把資料輸入進去了 但是我們不知道這資料是什麼日期插入的所以要去幫資料新增一筆時間的欄位
這時就要介紹date函數

parser.on('data', line =>{
  let udate = new Date();
  let nowtime = udate.toLocaleString('zh-hant', { timeZone: 'Asia/Taipei' })

大家看到這個會有個疑惑 不是只有Date函數嗎 怎麼多了一個localeString呢
那是因為Date讀取到的 是UTC+0的時間 會跟我們少八小時 所以我們改用本地的方式 直接去抓TimeZone
這時整個Mongodb的程式就會變這樣

 parser.on('data', line =>{
  let udate = new Date();
  let nowtime = udate.toLocaleString('zh-hant', { timeZone: 'Asia/Taipei' })
  console.log(line)
  Arduno_data = JSON.parse(line);
  Sensor_data = Object.values(Arduno_data)
  Sensor_key = Object.keys(Arduno_data)
  client.publish('arduino_data', line)
  MongoClient.connect("mongodb://127.0.0.1:27017/test",function(err,client){
    if(err){
        console.log(err);
        console.log('connecting fail');
        return;
    }
    console.log('connecting');
    var db_client = client.db('data_test')
    var db_table = db_client.collection('data')
    console.log('connection success')
    for(var i=0 ; i<Sensor_key.length;i++){
    db_client.collection('data',function(err,collection){
        collection.insertOne({ time:nowtime, name:Sensor_key[i], data:Sensor_data[i] });
     
    if(i == Sensor_key.length-1 ){
      collection.countDocuments(function(err,count){
        if(err) throw err;
        console.log('Total Rows:'+count);
    });
      collection.find({time:nowtime}).toArray(function(err,items){
      if(err) throw err;
      console.log(items);
      console.log("DATA FOUND");
    });
  }
  });
  }

  })
})

執行結果:
把資料存進資料庫後呢 之後就可以將資料做分析 做二氧化碳折線圖之類的 不過我們主旨不是資料分析 所以先不講這一塊
明天呢 會來開始講我們主角 樹梅派 一個便宜的單板電腦


上一篇
DAY13 MONGODB 介紹與使用
下一篇
DAY15 樹梅派介紹
系列文
初學者也能實做的環控系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言